 1.Impala的使⽤用
   
   Impala的核⼼心开发语⾔言是sql语句句，Impala有shell命令⾏行行窗⼝口，以及JDBC等⽅方式来接收sql语句句执⾏行行，
对于复杂类型分析可以使⽤用C++或者Java来编写UDF函数。
   Impala的sql语法是⾼高度集成了了Apache Hive的sql语法，Impala⽀支持Hive⽀支持的数据类型以及部分Hive
的内置函数。
   需要注意的⼏几点：
   1).Impala与Hive类似它们的重点都是在与查询，所以像Update,delete等具有更更新性质的操作最好不不
要使⽤用这种⼯工具，对于删除数据的操作可以通过Drop Table,Alter Table Drop Partition来实现，更更
新可以尝试使⽤用Insert overwrite⽅方式
   2).通常使⽤用Impala的⽅方式是数据⽂文件存储在Hdfs⽂文件系统，借助于Impala的表定义来查询和管理理
Hdfs上的数据⽂文件；
   3).Impala的使⽤用⼤大多数与Hive相同，⽐比如Impala同样⽀支持内外部表，以及分区等，可以借鉴参考
Hive的使⽤用。
 
 2.Impala-shell命令参数
   
   1).impala-shell外部命令
   所谓的外部命令指的是不不需要进⼊入到impala-shell交互命令⾏行行当中即可执⾏行行的命令参数。impala-shell后
⾯面执⾏行行的时候可以带很多参数。你可以在启动 impala-shell 时设置，⽤用于修改命令执⾏行行环境。
   impala-shell –h可以帮助我们查看帮助⼿手册。也可以参考课程附件资料料。
   比如⼏几个常⻅见的：
   impala-shell –r刷新impala元数据，与建⽴立连接后执行REFRESH 语句句效果相同(元数据发⽣生变化的时候)
   impala-shell –f ⽂文件路路径 执⾏行行指的的sql查询⽂文件。
   impala-shell –i指定连接运⾏行impalad 守护进程的主机。默认端⼝口是21000。你可以连接到集群中运行
impalad 的任意主机。
   impala-shell –o保存执⾏行行结果到⽂文件当中去。
   [root@linux121 sbin]# impala-shell -f /root/impala_data/test.sql
Starting Impala Shell without Kerberos authentication
Connected to Linux121:21000
Server version: impalad version 2.5.0-cdh5.7.6 RELEASE (build ecbba4f4e6d5eec6c33c1e02412621b8b9c71b6a)
Query: show databases
+------------------+----------------------------------------------+
| name             | comment                                      |
+------------------+----------------------------------------------+
| _impala_builtins | System database for Impala builtin functions |
| default          | Default Hive database                        |
| mydb             |                                              |
| sale             |                                              |
| test             |                                              |
+------------------+----------------------------------------------+
Fetched 5 row(s) in 0.03s
   展示Impala默认⽀支持的内置函数需要进⼊入Impala默认系统数据库中执⾏行行
   show functions;
   在其它数据库下⽆无法查看！！
    2).impala-shell内部命令
	所谓内部命令是指，进⼊入impala-shell命令⾏行行之后可以执⾏行行的语法。
	[Linux121:21000] > help;

Documented commands (type help <topic>):
========================================
compute   exit     history  quit    shell  unset   version
connect   explain  insert   select  show   use     with   
describe  help     profile  set     tip    values

Undocumented commands:
======================
alter  create  desc  drop  load  summary
    connect hostname 连接到指定的机器器impalad上去执⾏行行。
	[Linux121:21000] > connect linux122
                 > ;
Connected to linux122:21000
Server version: impalad version 2.5.0-cdh5.7.6 RELEASE (build ecbba4f4e6d5eec6c33c1e02412621b8b9c71b6a)
[linux122:21000] >
    refresh dbname.tablename增量量刷新，刷新某⼀一张表的元数据，主要⽤用于刷新hive当中数据表⾥里里⾯面的
数据改变的情况。
    [linux122:21000] > refresh default.t1;
Query: refresh default.t1

Fetched 0 row(s) in 1.22s
[linux122:21000] > 
    invalidate metadata全量量刷新，性能消耗较⼤大，主要⽤用于hive当中新建数据库或者数据库表的时候来进
⾏行行刷新。
    quit/exit命令 从Impala shell中退出
    explain 命令 ⽤用于查看sql语句句的执行计划。
	[linux122:21000] > select * from t1;
Query: select * from t1
+--------------------+-------+-----+--------+
| id                 | name  | age | gender |
+--------------------+-------+-----+--------+
| 392456197008193000 | 张三  | 20  | 0      |
| 267456198006210000 | 李李四 | 25  | 1      |
| 892456199007203000 | 王五  | 24  | 1      |
| 492456198712198000 | 赵六  | 26  | 2      |
| 392456197008193000 | 张三  | 20  | 0      |
| 392456197008193000 | 张三  | 20  | 0      |
+--------------------+-------+-----+--------+
Fetched 6 row(s) in 0.34s
     真正执行了数据查询
	 [linux122:21000] > explain select * from t1;
Query: explain select * from t1
+------------------------------------------------------------------------------------+
| Explain String                                                                     |
+------------------------------------------------------------------------------------+
| Estimated Per-Host Requirements: Memory=32.00MB VCores=1                           |
| WARNING: The following tables are missing relevant table and/or column statistics. |
| default.t1                                                                         |
|                                                                                    |
| 01:EXCHANGE [UNPARTITIONED]                                                        |
| |                                                                                  |
| 00:SCAN HDFS [default.t1]                                                          |
|    partitions=1/1 files=1 size=189B                                                |
+------------------------------------------------------------------------------------+
Fetched 8 row(s) in 0.02s
     并没有真正执行，只是列举出我们的sql语句对应的执行计划
	 explain的值可以设置成0, ,2,3 等几个值，其中3级别是最⾼高的，可以打印出最全的信息
	 set explain_level=3;
	 [linux122:21000] > set explain_level=3;
      EXPLAIN_LEVEL set to 3
	  [linux122:21000] > explain select * from t1;
Query: explain select * from t1
+------------------------------------------------------------------------------------+
| Explain String                                                                     |
+------------------------------------------------------------------------------------+
| Estimated Per-Host Requirements: Memory=32.00MB VCores=1                           |
| WARNING: The following tables are missing relevant table and/or column statistics. |
| default.t1                                                                         |
|                                                                                    |
| F01:PLAN FRAGMENT [UNPARTITIONED]                                                  |
|   01:EXCHANGE [UNPARTITIONED]                                                      |
|      hosts=1 per-host-mem=unavailable                                              |
|      tuple-ids=0 row-size=38B cardinality=unavailable                              |
|                                                                                    |
| F00:PLAN FRAGMENT [RANDOM]                                                         |
|   DATASTREAM SINK [FRAGMENT=F01, EXCHANGE=01, UNPARTITIONED]                       |
|   00:SCAN HDFS [default.t1, RANDOM]                                                |
|      partitions=1/1 files=1 size=189B                                              |
|      table stats: unavailable                                                      |
|      column stats: unavailable                                                     |
|      hosts=1 per-host-mem=32.00MB                                                  |
|      tuple-ids=0 row-size=38B cardinality=unavailable                              |
+------------------------------------------------------------------------------------+
Fetched 17 row(s) in 0.02s
     profile命令执⾏行行sql语句之后执行，可以
     打印出更更加详细的执⾏行行步骤，主要⽤用于查询结果的查看，集群的调优等。
	 [linux122:21000] > profile;
Query Runtime Profile:
Query (id=a246004e74c5889c:ef3b74e862d1e4ae):
  Summary:
    Session ID: 87447c621d5bc0b7:4d72cd1b785498
    Session Type: BEESWAX
    Start Time: 2021-12-02 23:11:28.219597000
    End Time: 2021-12-02 23:11:28.234403000
    Query Type: EXPLAIN
    Query State: FINISHED
    Query Status: OK
    Impala Version: impalad version 2.5.0-cdh5.7.6 RELEASE (build ecbba4f4e6d5eec6c33c1e02412621b8b9c71b6a)
    User: root
    Connected User: root
    Delegated User: 
    Network Address: ::ffff:192.168.71.100:56786
    Default Db: default
    Sql Statement: explain select * from t1
    Coordinator: linux122:22000
    Query Options (non default): EXPLAIN_LEVEL=3
    : 0.000ns
    Query Timeline: 15.075ms
       - Start execution: 50.865us (50.865us)
       - Planning finished: 6.391ms (6.340ms)
       - Rows available: 6.534ms (143.669us)
       - First row fetched: 11.157ms (4.623ms)
       - Unregister query: 14.831ms (3.673ms)
  ImpalaServer:
     - ClientFetchWaitTimer: 8.213ms
     - RowMaterializationTimer: 0.000ns
	 expalin:可以不不真正执⾏行行任务，只是展示任务的执⾏行行计划；
     profile:需要任务执⾏行行完成后调⽤用，可以从更更底层以及更更详细的层⾯面来观察我们运行impala的任务，进
⾏行行调优。